草庐IT

linux - Bash 脚本如果 elif elif 不工作

所以我试图在bash脚本中执行ifelseifelse语句。截至目前,当我运行此脚本时,我收到以下错误消息“./groupJobs.sh:line76:syntaxerrornearunexpectedtokenelif'./groupJobs.sh:第76行:elif[$jobsize-lt$2];那么'"我在网上查看了多个示例,看不出我所做的与其他人所说的有任何区别。如有任何帮助,我们将不胜感激。(第76行是最后一个elif语句)if[$filesize-ge$2];then#goesthiswayiffileistobigtoputinajobwithanyotherfiles$

linux - 并行运行 bash shell 并等待

我在一个目录中有100个文件,我想分几个步骤处理每个文件,而第1步很耗时。所以伪代码是这样的:forfilenamein~/dir/*;dorun_step1filename>${filename}.out&doneforoutfilein~/dir/*.out;dorun_step2outfile>${outfile}.resultdone我的问题是如何检查给定输入文件的第1步是否已完成。我曾经在C#中使用threads.join,但不确定bashshell是否具有等效项。 最佳答案 看起来你想要:forfilenamein~/d

linux - 如何在 Bash 中将秒数转换为分秒数?

我有一个Bash脚本,它通过它的API从网站下载文件,我想在最后实现一个东西(没有更好的词)来显示脚本完成所需的时间。使用这段代码,我能够做到:#!/bin/bashSECONDS=0#--CodetoExecute--echo"Taskcomplete"echo"Scriptcompletedin$(echo"scale=2;$SECONDS/60"|bc)minutes"但是,这将显示脚本执行所花费的时间(不到一分钟):TaskcompleteScriptcompletedin1.35minutes我如何才能将脚本完成所用的秒数转换为分钟和秒数?像这样:TaskcompleteSc

linux - 在 bash/linux 中并行运行 shell 脚本

我有一个shell脚本job.sh。内容如下:#!/bin/bashtable=$1sqoopjob--exec${table}现在当我做./job.shtable1脚本执行成功。我在文件tables.txt中有表名。现在我想遍历tables.txt文件并并行执行job.sh脚本10次。我该怎么做?理想情况下,当我执行脚本时,我希望它像下面那样做;./job.shtable1./job.shtable2./job.shtable3./job.shtable4./job.shtable5./job.shtable6./job.shtable7./job.shtable8./job.sht

linux - Bash:检查命令的输出

我需要在bash脚本中检查apachectlconfigtest的输出,如果一切正常而不将命令输出到屏幕则重新启动var=sudoapachectlconfigtest如果var包含“SyntaxOK”则sudoapachectlgraceful怎么做? 最佳答案 我知道这是旧线程,这个问题不适合这个特定站点。无论如何,寻找相同的问题,此页面显示为第一个搜索结果。所以,我在这里发布我的最终解决方案,以供引用。configtestResult=$(sudoapachectlconfigtest2>&1)if["$configtestR

linux - Docker $(pwd) 和 bash 别名

我在Ubuntu16.04中运行DockerCE。我为polymer-cli创建了一个Docker镜像。这个想法是能够使用挂载当前目录的bash别名从一次性docker容器内部运行polymer命令,运行命令然后销毁容器,如下所示:dockerrun--rm-it-v$(pwd):/home/node/app-unodefresnizky/polymer-clipolymer这很完美,但是如果我为这个命令创建一个bash别名:aliaspolymer="dockerrun--rm-it-v$(pwd):/home/node/app-unodefresnizky/polymer-clip

linux - 如何比较bash中的2个范围列表?

使用bash脚本(Ubuntu16.04),我正在尝试比较2个范围列表:file1中任何范围内的任何数字是否与file2中任何范围内的任何数字一致?如果是这样,打印第二个文件中的行。在这里,我将每个范围作为2个制表符分隔的列(在文件1中,第1行表示范围1-4,即1、2、3、4)。真正的文件是相当大的。文件1:14578111215文件2:348132024期望的输出:34813我最好的尝试是:awk'NR=FNR{x[$1]=$1+0;y[$2]=$2+0;next};{for(iinx){if(x[i]>$1+0);then{for(iiny){if(y[i]output.txt这将

linux - 使用 bash,如何删除特定目录中所有文件的扩展名?

我想保留文件但删除它们的扩展名。这些文件没有相同的扩展名。我的最终目标是删除所有扩展名并将它们更改为我选择的一个扩展名。我有第二部分。到目前为止我的代码:#!/bin/bashecho-n"Enterthedirectory:"readpath#Removeallextensionsfind$path-typef-execmv'{}''{}'.extension\;#adddesiredextension 最佳答案 为此,您不需要外部命令find,而是单独在bash中执行。下面的脚本从文件夹path中的所有文件中删除扩展名。forf

linux - Bash 脚本 - 仅更改一列中的值

例如我有1个文件123412343,0123413424,0如何打印:abcdabcd3,0abcdacdb4,0cat$1|tr1234abcd更改第1列和第2列。如何仅更改1列并打印所有列? 最佳答案 一种方法是拆分列,然后用paste重新加入它们:pasteprocesssubstitution的语法是一个bashism,但所需的功能来自paste,cut和tr工具都是POSIX指定的;因此,我们唯一需要运行的不属于POSIX标准的东西就是bash本身。 关于linux-Bash脚

linux - 如何在 bash cli 中将多个命令组合成单个命令?

要删除卷,首先要使其离线,然后再删除。以下是执行此操作的命令。foriin{1..16};dovol--offlineStressIO-v$i--force||break;doneforiin{1..16};dovol--deleteStressIO-v$i||break;done如何组合这些命令并作为单个命令执行? 最佳答案 您可以像这样使用GNUParallel并行执行所有16个操作,遇到第一个错误就停止:parallel--haltnow,fail=1-k--dry-run'vol--offlineStressIO-v{}--